#include "FilterPack.h"
#include <cv.h>
#include <iterator>

using namespace std;

void FilterPack::addFilter(Filter *f){
	filterList.push_back(f);
}

void FilterPack::clear(){
	list<Filter*>::iterator it = filterList.begin();
	while (it != filterList.end()){
		delete (*it);
		++it;
	}
	filterList.clear();
}

void FilterPack::process(const cv::Mat & src, cv::Mat & dst){
	//estas son las matrices temporales
	cv::Mat tmp1(src.clone()), tmp2(src.size(), src.type());
	list<Filter*>::iterator it = filterList.begin();
	int i;

	//itero por los filtros, y dependiendo de si es par o no la iteración, uso un Mat temporal u otro
	for (i = 0; it != filterList.end(); ++i, ++it){
		if (i % 2)
			(*it)->process(tmp2, tmp1);
		else
			(*it)->process(tmp1, tmp2);
	}
	if ((i-1) % 2)
		dst = tmp1;
	else
		dst = tmp2;
}

